package com.stars.module.menu.service;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.stars.base.entity.CommonDTO;
import com.stars.base.exception.BaseException;
import com.stars.module.menu.entity.MenuEntity;
import com.stars.module.menu.entity.StarMenuVo;

import java.util.List;

/**
 * @author : Rocks
 * @version : 1.0
 * @date : 2022/11/8 10:26
 * @description : 菜单服务接口
 */
public interface StarMenuService {

    /**
     * 保存或更新菜单操作
     * @author : Rocks
     * @date :  2023/2/25 22:46
     * @param menu 要保存菜单数据实体Bean
     * @return boolean 成功-true 失败-false
     */
    boolean saveOrUpdateMenu(StarMenuVo menu);

    /**
     * 删除菜单操作
     * @author : Rocks
     * @date :  2023/2/25 22:47
     * @param id 要删除记录的ID
     * @return boolean 成功-true 失败-false
     */
    boolean removeMenu(String id);

    /**
     * 根据菜单ID加载对应菜单数据
     * @author : Rocks
     * @date :  2023/2/25 22:47
     * @param id 菜单ID
     * @return StarMenu 菜单数据实体Bean
     */
    StarMenuVo loadMenuById(String id);

    /**
     * 根据查询条件加载菜单列表
     * @author : Rocks
     * @date :  2023/2/25 22:48
     * @param search 查询条件
     * @return JSONObject list-列表数据 total-列表数据总数
     */
    JSONObject loadMenuByFid(CommonDTO search);

    /**
     * 加载当前登录人有权限的菜单
     * TODO 用户组织架构/角色/权限管理以及授权功能开发完成后修改此部分代码
     * @author : Rocks
     * @date :  2023/2/25 22:48
     * @return List<MenuEntity> 菜单list
     */
    List<MenuEntity> loadMenuByUser() throws BaseException;

    /**
     * 菜单管理加载全部菜单数据
     * @author : Rocks
     * @date :  2023/2/25 22:49
     * @return JSONArray 以ElementUI树结构返回菜单数据
     */
    JSONArray loadAllMenu();

    /**
     * 查询指定父级下子节点最大排序
     * @author : Rocks
     * @date :  2023/2/25 22:50
     * @param fid 父节点ID
     * @return int 指定父节点下子节点最大排序
     */
    int getMaxIndex(String fid);
}
